Création d'un menu de navigation simple et responsive

Pour commencer, il faut déjà une structure HTML pour ce menu. On utilise la plupart du temps une liste <ul> pour lister les liens à l'intérieure :

            

                <nav class="custom-navbar">
                    <ul>
                        <li><a href="#">Lien 1</a></li>
                        <li><a href="#">Lien 2</a></li>
                        <li><a href="#">Lien 3</a></li>
                        <li><a href="#">Lien 4</a></li>
                        <li><a href="#">Lien 5</a></li>
                    </ul>
                </nav>

            
        

Sans code CSS, le menu donne ça visuellement :

Un peu de CSS sur le conteneur du menu :

            

                .custom-navbar{
                    background-color: #a81829;
                }

                .custom-navbar ul{
                    /* Suppression des marges naturelles de la liste ul */
                    margin: 0;
                    padding: 0;
                    /* Affichage des li en ligne grâce à flexbox */
                    display: flex;
                    flex-direction: row;
                    /* Suppression des petites billes noires devant les éléments de la liste */
                    list-style: none;
                }

            
        

Résultat :

Stylisation des liens maintenant :

            

                .custom-navbar{
                    background-color: #a81829;
                }

                .custom-navbar ul{
                    margin: 0;
                    padding: 0;
                    display: flex;
                    flex-direction: row;
                    list-style: none;
                }

                .custom-navbar ul li a{
                    color: white;
                    /* Agrandissement de l'espace autour du texte des liens pour donner une apparence rectangle au lien */
                    padding: 25px;
                    /* Agrandissement de la taille du texte des liens */
                    font-size: 1.4rem;
                    /* Retrait du soulignement des liens */
                    text-decoration: none;
                    /* Transition de 0.3 secondes pour le hover */
                    transition: .3s all ease;
                    /* Transformation des liens en type "block", sinon ils ne peuvent pas avoir de marges top et bottom ! */
                    display: block;
                }

                /* Quand la souris passe sur un des liens, il change de couleur de texte et de couleur de fond */
                .custom-navbar ul li a:hover{
                    color: #a81829;
                    background-color: white;
                }

            
        

Résultat :

Il ne reste maintenant plus qu'à rendre ce menu responsive en passant tous les liens en colonne sur les petits écrans :

            

                .custom-navbar{
                    background-color: #a81829;
                }

                .custom-navbar ul{
                    margin: 0;
                    padding: 0;
                    display: flex;
                    /* Par défaut, les boutons seront affichés en colonnes, puis la media query mettre en direction row sur les grands écrans (principe du mobile first !) */
                    flex-direction: column;
                    list-style: none;
                }

                .custom-navbar ul li a{
                    color: white;
                    padding: 25px;
                    font-size: 1.4rem;
                    text-decoration: none;
                    transition: .3s all ease;
                    display: block;
                }

                .custom-navbar ul li a:hover{
                    color: #a81829;
                    background-color: white;
                }

                /* Media query qui s'activera sur les écrans faisant au moins 700 pixels de large */
                @media screen and (min-width: 700px) {

                    /* Sur les grands écrans, les liens seront en ligne et non plus en colonne. En cas de manque de place, les liens passeront en dessous */
                    .custom-navbar ul{
                        flex-direction: row;
                        flex-wrap: wrap;
                    }

                }
                

            
        

Résultat (réduisez la taille de la fenêtre pour voir le changement !) :